{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def func(x): return x*np.sin(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# #############################################################################\n",
    "# 生成带有噪声的正弦数据\n",
    "size = 25\n",
    "rng = np.random.RandomState(1234) # 1234为随机种子\n",
    "x_train = rng.uniform(0., 1., size) # 生成[0, 1)中的随机数double\n",
    "y_train = func(x_train) + rng.normal(scale=0.1, size=size) # 生成标准差为0.1的正态分布\n",
    "x_test = np.linspace(0., 1., 100) # 将[0, 1]分解为100个等间距点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# #############################################################################\n",
    "# 三次多项式拟合\n",
    "n_order = 3\n",
    "# 生成范德蒙矩阵,输出3+1列,列的幂顺序左向右增加\n",
    "X_train = np.vander(x_train, n_order + 1, increasing=True)\n",
    "X_test = np.vander(x_test, n_order + 1, increasing=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$V=\\left[\\begin{array}{ccccc}\n",
    "1 & \\alpha_{1} & \\alpha_{1}^{2} & \\ldots & \\alpha_{1}^{n+1} \\\\\n",
    "1 & \\alpha_{2} & \\alpha_{2}^{2} & \\ldots & \\alpha_{2}^{n+1} \\\\\n",
    "1 & \\alpha_{3} & \\alpha_{3}^{2} & \\ldots & \\alpha_{3}^{n+1} \\\\\n",
    "\\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
    "1 & \\alpha_{m} & \\alpha_{m}^{2} & \\cdots & \\alpha_{m}^{n+1}\n",
    "\\end{array}\\right]$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# #############################################################################\n",
    "# 用对数边际似然(L)函数绘制真实曲线和预测曲线\n",
    "from sklearn.linear_model import BayesianRidge\n",
    "reg = BayesianRidge(tol=1e-6, fit_intercept=False, compute_score=True)\n",
    "# tol: float, default=1e-3\n",
    "# 如果w收敛, 则停止算法.\n",
    "# fit_intercept: bool, default=True\n",
    "# 是否计算此模型的截距. 截距不被视为概率参数, 因此没有相关联的方差. 如果设置为False, 则不会在计算中使用截距(数据应集中).\n",
    "# compute_score: bool, default=False\n",
    "# 如果为True, 则在每次优化迭代时计算对数边际似然函数.\n",
    "# alpha_init: float, default=None\n",
    "# alpha(噪声的精度)的初始值. 如果未设置, 则alpha_init为1/Var(y).\n",
    "# lambda_init: float, default=None\n",
    "# Lambda的初始值(权重的精度). 如果未设置, 则lambda_init为1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 one\n",
      "1 two\n",
      "2 three\n",
      "1.23\n",
      "1.23\n"
     ]
    }
   ],
   "source": [
    "# 枚举举例\n",
    "seq = ['one', 'two', 'three']\n",
    "for i, element in enumerate(seq):\n",
    "    print(i, element)\n",
    "# 两种格式化输出方法举例\n",
    "w = 1.234\n",
    "print('%.2f' %w)\n",
    "print(\"{:.2f}\".format(w))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(8, 4)) # 返回一个包含figure和axes对象的元组\n",
    "for i, ax in enumerate(axes):\n",
    "    # 不同初始值对的贝叶斯岭回归\n",
    "    if i == 0:\n",
    "        init = [1 / np.var(y_train), 1.]  # 默认值\n",
    "    elif i == 1:\n",
    "        init = [1., 1e-3]\n",
    "        reg.set_params(alpha_init=init[0], lambda_init=init[1]) # 获取此估计量的参数.\n",
    "    reg.fit(X_train, y_train) # 拟合模型\n",
    "    ymean, ystd = reg.predict(X_test, return_std=True) # 均值, 标准差 = 使用线性模型进行预测.\n",
    "    ax.plot(x_test, func(x_test), color=\"blue\", label=\"$x*sin(x)$\")\n",
    "    ax.scatter(x_train, y_train, s=50, alpha=0.5, label=\"观测值\") # s:标记大小, alpha:0(透明)~1(不透明)\n",
    "    ax.plot(x_test, ymean, color=\"red\", label=\"预测均值\")\n",
    "    ax.fill_between(x_test, ymean-ystd, ymean+ystd,\n",
    "                    color=\"pink\", alpha=0.5, label=\"预测标准差\")\n",
    "    ax.set_ylim(-0.25, 1.2)\n",
    "    ax.legend(loc=2) # 四个象限中的第二象限\n",
    "    title = \"$\\\\alpha$_init$={:.2f},\\\\ \\\\lambda$_init$={}$\".format(\n",
    "            init[0], init[1])\n",
    "    if i == 0:\n",
    "        title += \" (默认)\"\n",
    "    ax.set_title(title, fontsize=12)\n",
    "    text = \"$\\\\alpha={:.1f}$\\n$\\\\lambda={:.3f}$\\n$L={:.1f}$\".format(\n",
    "           reg.alpha_, reg.lambda_, reg.scores_[-1])\n",
    "    # 单末尾下划线 var_: 一个变量的最合适的名称已经被一个关键字所占用, 可以附加一个下划线来解决命名冲突：\n",
    "    ax.text(0.7, -0.1, text, fontsize=12)\n",
    "\n",
    "plt.tight_layout() # 自动调整子图参数, 使之填充整个图像区域.\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
